#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int NN=1e5+4;
struct square
{
	int x1,y1,x2,y2;
}a[NN];
vector<pair<int,int> >p[NN];
ll ans[NN],tr2[NN];
int n;
int lowbit(int x)
{
	return x&-x;
}
void add(int u,ll v)
{
	while(u<=n)
	{
		tr2[u]+=v;
		u+=lowbit(u);
	}
}
ll ask(int u)
{
	ll res=0;
	while(u)
	{
		res+=tr2[u];
		u-=lowbit(u);
	}
	return res;
}
void solve(square u,int w,int p)
{
	if(u.x1>u.x2||u.y1>u.y2)
		return;
	while(p<=n&&(min(u.x2,a[p].x2)<max(u.x1,a[p].x1)||min(u.y2,a[p].y2)<max(u.y1,a[p].y1)))
		p++;
	if(p>n)
		return;
	add(p,1ll*w*(min(u.x2,a[p].x2)-max(u.x1,a[p].x1)+1)*(min(u.y2,a[p].y2)-max(u.y1,a[p].y1)+1));
	solve({u.x1,u.y1,min(a[p].x2,u.x2),a[p].y1-1},w,p+1);
	solve({a[p].x2+1,u.y1,u.x2,min(a[p].y2,u.y2)},w,p+1);
	solve({max(a[p].x1,u.x1),a[p].y2+1,u.x2,u.y2},w,p+1);
	solve({u.x1,max(a[p].y1,u.y1),a[p].x1-1,u.y2},w,p+1);
}
int main()
{
	freopen("dierti.in","r",stdin);
	freopen("dierti.out","w",stdout);
	int q;
	scanf("%*d%d%d",&n,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
		a[i].x2--,a[i].y2--;
	}
	for(int i=1;i<=q;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		p[l].push_back({r,i});
	}
	for(int i=n;i>=1;i--)
	{
		solve({1,1,1000000000,1000000000},1,i);
		for(int j=0;j<p[i].size();j++)
			ans[p[i][j].second]=ask(p[i][j].first);
		solve({1,1,1000000000,1000000000},-1,i);
	}
	for(int i=1;i<=q;i++)
		printf("%lld\n",ans[i]);
	return 0;
}
